This uses tje NEON tutorial at https://www.neonscience.org/resources/learning-hub/tutorials/neondatastackr

library(neonUtilities)
library(plyr)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.7     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::arrange()   masks plyr::arrange()
## ✖ purrr::compact()   masks plyr::compact()
## ✖ dplyr::count()     masks plyr::count()
## ✖ dplyr::failwith()  masks plyr::failwith()
## ✖ dplyr::filter()    masks stats::filter()
## ✖ dplyr::id()        masks plyr::id()
## ✖ dplyr::lag()       masks stats::lag()
## ✖ dplyr::mutate()    masks plyr::mutate()
## ✖ dplyr::rename()    masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()
library(xtable)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following objects are masked from 'package:plyr':
## 
##     arrange, mutate, rename, summarise
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(ggrepel)
zipsByProduct(dpID='DP1.10086.001', check.size=FALSE, package = 'expanded', site = 'all')
stackByTable(filepath="/home/jlb/jlb@umass.edu/GoEcology/myGitHub/lterwg-emergent/code/filesToStack10086")

get neonstore data package

https://www.rdocumentation.org/packages/neonstore/versions/0.4.4

soil_fieldBgc_down <- readTableNEON(
  dataFile='filesToStack10086/stackedFiles/sls_bgcSubsampling.csv',
  varFile='filesToStack10086/stackedFiles/variables_10086.csv')
soil_fieldBgc_down <- select(soil_fieldBgc_down, sampleID, cnSampleID, 
        bgcArchiveID,bgcSampleCondition=sampleCondition, bgcDataQF)
soil_fieldCore_down <- readTableNEON(
  dataFile='filesToStack10086/stackedFiles/sls_soilCoreCollection.csv',
  varFile='filesToStack10086/stackedFiles/variables_10086.csv')
soil_fieldMoist_down <- readTableNEON(
  dataFile='filesToStack10086/stackedFiles/sls_soilMoisture.csv',
  varFile='filesToStack10086/stackedFiles/variables_10086.csv')
soil_fieldPh_down <- readTableNEON(
  dataFile='filesToStack10086/stackedFiles/sls_soilpH.csv',
  varFile='filesToStack10086/stackedFiles/variables_10086.csv')
# join soil field tables: core collection, moisture, pH, bgc sub-sampling
soilField_down <- left_join(soil_fieldCore_down, soil_fieldMoist_down, 
            by=c('sampleID', 'domainID', 'siteID', 'namedLocation', 'plotID', 'collectDate', 'horizon', 'sampleCode') ) %>%
    select(-uid.x, -uid.y, -samplingProtocolVersion.y)
soilField_down <- left_join(soilField_down, soil_fieldPh_down, by=c('sampleID', 'sampleCode', 'domainID', 'siteID',
                                                     'plotID', 'namedLocation', 'collectDate')) %>%
  select(-uid, -boatMass, -freshMassBoatMass, -dryMassBoatMass, -pHSoilInWaterMass, -pHWaterVol,
         -pHSoilInCaClMass, -pHCaClVol, -pHSampleID)
soilField_down <- left_join(soilField_down, soil_fieldBgc_down, by=c('sampleID') )
# read soil chem and isotope data #
soil_chem_down <- readTableNEON(
  dataFile='filesToStack10086/stackedFiles/sls_soilChemistry.csv',
  varFile='filesToStack10086/stackedFiles/variables_10086.csv') %>% 
  select(sampleID, cnSampleID, sampleType,acidTreatment, nitrogenPercent, organicCPercent,
         CNratio, cnPercentQF, percentAccuracyQF, analyticalRepNumber, cnRemarks=remarks,
         cnLaboratoryName=laboratoryName, cnTestMethod=testMethod, cnInstrument=instrument, 
         cnDataQF=dataQF)
# join soil chem and field data tables
soilFieldChem_down <- left_join(soilField_down, soil_chem_down, by=c('sampleID', 'cnSampleID') )

Site-level ranges in soil moisture

Site-level ranges in soil temp

Forested sites only

Grassland sites only

Site-level summary table of discrete temp, moisture, and pH data. Not rendering nicely…

#### moisture ####
hasMoisture <- !is.na(soilField_down$soilMoisture)

moistureSummary <- data.frame(soilField_down[hasMoisture, ] %>% group_by(siteID) %>% 
  summarise(meansoilMoisture=mean(soilMoisture)) )

dat <- xtable(moistureSummary)
print(dat, type = "html")
## <!-- html table generated in R 4.1.2 by xtable 1.8-4 package -->
## <!-- Fri May 20 18:10:20 2022 -->
## <table border=1>
## <tr> <th>  </th> <th> siteID </th> <th> meansoilMoisture </th>  </tr>
##   <tr> <td align="right"> 1 </td> <td> ABBY </td> <td align="right"> 0.80 </td> </tr>
##   <tr> <td align="right"> 2 </td> <td> BARR </td> <td align="right"> 4.91 </td> </tr>
##   <tr> <td align="right"> 3 </td> <td> BART </td> <td align="right"> 2.09 </td> </tr>
##   <tr> <td align="right"> 4 </td> <td> BLAN </td> <td align="right"> 0.20 </td> </tr>
##   <tr> <td align="right"> 5 </td> <td> BONA </td> <td align="right"> 1.70 </td> </tr>
##   <tr> <td align="right"> 6 </td> <td> CLBJ </td> <td align="right"> 0.18 </td> </tr>
##   <tr> <td align="right"> 7 </td> <td> CPER </td> <td align="right"> 0.07 </td> </tr>
##   <tr> <td align="right"> 8 </td> <td> DCFS </td> <td align="right"> 0.33 </td> </tr>
##   <tr> <td align="right"> 9 </td> <td> DEJU </td> <td align="right"> 0.92 </td> </tr>
##   <tr> <td align="right"> 10 </td> <td> DELA </td> <td align="right"> 0.34 </td> </tr>
##   <tr> <td align="right"> 11 </td> <td> DSNY </td> <td align="right"> 0.24 </td> </tr>
##   <tr> <td align="right"> 12 </td> <td> GRSM </td> <td align="right"> 1.08 </td> </tr>
##   <tr> <td align="right"> 13 </td> <td> GUAN </td> <td align="right"> 0.33 </td> </tr>
##   <tr> <td align="right"> 14 </td> <td> HARV </td> <td align="right"> 1.58 </td> </tr>
##   <tr> <td align="right"> 15 </td> <td> HEAL </td> <td align="right"> 3.79 </td> </tr>
##   <tr> <td align="right"> 16 </td> <td> JERC </td> <td align="right"> 0.08 </td> </tr>
##   <tr> <td align="right"> 17 </td> <td> JORN </td> <td align="right"> 0.03 </td> </tr>
##   <tr> <td align="right"> 18 </td> <td> KONA </td> <td align="right"> 0.24 </td> </tr>
##   <tr> <td align="right"> 19 </td> <td> KONZ </td> <td align="right"> 0.31 </td> </tr>
##   <tr> <td align="right"> 20 </td> <td> LAJA </td> <td align="right"> 0.28 </td> </tr>
##   <tr> <td align="right"> 21 </td> <td> LENO </td> <td align="right"> 0.36 </td> </tr>
##   <tr> <td align="right"> 22 </td> <td> MLBS </td> <td align="right"> 0.89 </td> </tr>
##   <tr> <td align="right"> 23 </td> <td> MOAB </td> <td align="right"> 0.05 </td> </tr>
##   <tr> <td align="right"> 24 </td> <td> NIWO </td> <td align="right"> 0.37 </td> </tr>
##   <tr> <td align="right"> 25 </td> <td> NOGP </td> <td align="right"> 0.24 </td> </tr>
##   <tr> <td align="right"> 26 </td> <td> OAES </td> <td align="right"> 0.16 </td> </tr>
##   <tr> <td align="right"> 27 </td> <td> ONAQ </td> <td align="right"> 0.12 </td> </tr>
##   <tr> <td align="right"> 28 </td> <td> ORNL </td> <td align="right"> 0.35 </td> </tr>
##   <tr> <td align="right"> 29 </td> <td> OSBS </td> <td align="right"> 0.38 </td> </tr>
##   <tr> <td align="right"> 30 </td> <td> PUUM </td> <td align="right"> 3.97 </td> </tr>
##   <tr> <td align="right"> 31 </td> <td> RMNP </td> <td align="right"> 0.43 </td> </tr>
##   <tr> <td align="right"> 32 </td> <td> SCBI </td> <td align="right"> 0.33 </td> </tr>
##   <tr> <td align="right"> 33 </td> <td> SERC </td> <td align="right"> 0.28 </td> </tr>
##   <tr> <td align="right"> 34 </td> <td> SJER </td> <td align="right"> 0.06 </td> </tr>
##   <tr> <td align="right"> 35 </td> <td> SOAP </td> <td align="right"> 0.20 </td> </tr>
##   <tr> <td align="right"> 36 </td> <td> SRER </td> <td align="right"> 0.03 </td> </tr>
##   <tr> <td align="right"> 37 </td> <td> STEI </td> <td align="right"> 1.02 </td> </tr>
##   <tr> <td align="right"> 38 </td> <td> STER </td> <td align="right"> 0.16 </td> </tr>
##   <tr> <td align="right"> 39 </td> <td> TALL </td> <td align="right"> 0.21 </td> </tr>
##   <tr> <td align="right"> 40 </td> <td> TEAK </td> <td align="right"> 0.15 </td> </tr>
##   <tr> <td align="right"> 41 </td> <td> TOOL </td> <td align="right"> 4.33 </td> </tr>
##   <tr> <td align="right"> 42 </td> <td> TREE </td> <td align="right"> 1.30 </td> </tr>
##   <tr> <td align="right"> 43 </td> <td> UKFS </td> <td align="right"> 0.34 </td> </tr>
##   <tr> <td align="right"> 44 </td> <td> UNDE </td> <td align="right"> 2.98 </td> </tr>
##   <tr> <td align="right"> 45 </td> <td> WOOD </td> <td align="right"> 0.42 </td> </tr>
##   <tr> <td align="right"> 46 </td> <td> WREF </td> <td align="right"> 0.81 </td> </tr>
##   <tr> <td align="right"> 47 </td> <td> YELL </td> <td align="right"> 0.12 </td> </tr>
##    </table>
#### temp ####
hasTemp <- !is.na(soilField_down$soilTemp)

tempSummary <- data.frame(soilField_down[hasTemp, ] %>% group_by(siteID) %>% 
  summarise(meansoilTemp=mean(soilTemp)) )

dat <- xtable(moistureSummary)
print(dat, type = "html")
## <!-- html table generated in R 4.1.2 by xtable 1.8-4 package -->
## <!-- Fri May 20 18:10:20 2022 -->
## <table border=1>
## <tr> <th>  </th> <th> siteID </th> <th> meansoilMoisture </th>  </tr>
##   <tr> <td align="right"> 1 </td> <td> ABBY </td> <td align="right"> 0.80 </td> </tr>
##   <tr> <td align="right"> 2 </td> <td> BARR </td> <td align="right"> 4.91 </td> </tr>
##   <tr> <td align="right"> 3 </td> <td> BART </td> <td align="right"> 2.09 </td> </tr>
##   <tr> <td align="right"> 4 </td> <td> BLAN </td> <td align="right"> 0.20 </td> </tr>
##   <tr> <td align="right"> 5 </td> <td> BONA </td> <td align="right"> 1.70 </td> </tr>
##   <tr> <td align="right"> 6 </td> <td> CLBJ </td> <td align="right"> 0.18 </td> </tr>
##   <tr> <td align="right"> 7 </td> <td> CPER </td> <td align="right"> 0.07 </td> </tr>
##   <tr> <td align="right"> 8 </td> <td> DCFS </td> <td align="right"> 0.33 </td> </tr>
##   <tr> <td align="right"> 9 </td> <td> DEJU </td> <td align="right"> 0.92 </td> </tr>
##   <tr> <td align="right"> 10 </td> <td> DELA </td> <td align="right"> 0.34 </td> </tr>
##   <tr> <td align="right"> 11 </td> <td> DSNY </td> <td align="right"> 0.24 </td> </tr>
##   <tr> <td align="right"> 12 </td> <td> GRSM </td> <td align="right"> 1.08 </td> </tr>
##   <tr> <td align="right"> 13 </td> <td> GUAN </td> <td align="right"> 0.33 </td> </tr>
##   <tr> <td align="right"> 14 </td> <td> HARV </td> <td align="right"> 1.58 </td> </tr>
##   <tr> <td align="right"> 15 </td> <td> HEAL </td> <td align="right"> 3.79 </td> </tr>
##   <tr> <td align="right"> 16 </td> <td> JERC </td> <td align="right"> 0.08 </td> </tr>
##   <tr> <td align="right"> 17 </td> <td> JORN </td> <td align="right"> 0.03 </td> </tr>
##   <tr> <td align="right"> 18 </td> <td> KONA </td> <td align="right"> 0.24 </td> </tr>
##   <tr> <td align="right"> 19 </td> <td> KONZ </td> <td align="right"> 0.31 </td> </tr>
##   <tr> <td align="right"> 20 </td> <td> LAJA </td> <td align="right"> 0.28 </td> </tr>
##   <tr> <td align="right"> 21 </td> <td> LENO </td> <td align="right"> 0.36 </td> </tr>
##   <tr> <td align="right"> 22 </td> <td> MLBS </td> <td align="right"> 0.89 </td> </tr>
##   <tr> <td align="right"> 23 </td> <td> MOAB </td> <td align="right"> 0.05 </td> </tr>
##   <tr> <td align="right"> 24 </td> <td> NIWO </td> <td align="right"> 0.37 </td> </tr>
##   <tr> <td align="right"> 25 </td> <td> NOGP </td> <td align="right"> 0.24 </td> </tr>
##   <tr> <td align="right"> 26 </td> <td> OAES </td> <td align="right"> 0.16 </td> </tr>
##   <tr> <td align="right"> 27 </td> <td> ONAQ </td> <td align="right"> 0.12 </td> </tr>
##   <tr> <td align="right"> 28 </td> <td> ORNL </td> <td align="right"> 0.35 </td> </tr>
##   <tr> <td align="right"> 29 </td> <td> OSBS </td> <td align="right"> 0.38 </td> </tr>
##   <tr> <td align="right"> 30 </td> <td> PUUM </td> <td align="right"> 3.97 </td> </tr>
##   <tr> <td align="right"> 31 </td> <td> RMNP </td> <td align="right"> 0.43 </td> </tr>
##   <tr> <td align="right"> 32 </td> <td> SCBI </td> <td align="right"> 0.33 </td> </tr>
##   <tr> <td align="right"> 33 </td> <td> SERC </td> <td align="right"> 0.28 </td> </tr>
##   <tr> <td align="right"> 34 </td> <td> SJER </td> <td align="right"> 0.06 </td> </tr>
##   <tr> <td align="right"> 35 </td> <td> SOAP </td> <td align="right"> 0.20 </td> </tr>
##   <tr> <td align="right"> 36 </td> <td> SRER </td> <td align="right"> 0.03 </td> </tr>
##   <tr> <td align="right"> 37 </td> <td> STEI </td> <td align="right"> 1.02 </td> </tr>
##   <tr> <td align="right"> 38 </td> <td> STER </td> <td align="right"> 0.16 </td> </tr>
##   <tr> <td align="right"> 39 </td> <td> TALL </td> <td align="right"> 0.21 </td> </tr>
##   <tr> <td align="right"> 40 </td> <td> TEAK </td> <td align="right"> 0.15 </td> </tr>
##   <tr> <td align="right"> 41 </td> <td> TOOL </td> <td align="right"> 4.33 </td> </tr>
##   <tr> <td align="right"> 42 </td> <td> TREE </td> <td align="right"> 1.30 </td> </tr>
##   <tr> <td align="right"> 43 </td> <td> UKFS </td> <td align="right"> 0.34 </td> </tr>
##   <tr> <td align="right"> 44 </td> <td> UNDE </td> <td align="right"> 2.98 </td> </tr>
##   <tr> <td align="right"> 45 </td> <td> WOOD </td> <td align="right"> 0.42 </td> </tr>
##   <tr> <td align="right"> 46 </td> <td> WREF </td> <td align="right"> 0.81 </td> </tr>
##   <tr> <td align="right"> 47 </td> <td> YELL </td> <td align="right"> 0.12 </td> </tr>
##    </table>
#### pH ####
haspH <- !is.na(soilField_down$soilInCaClpH)

pHSummary <- data.frame(soilField_down[haspH, ] %>% group_by(siteID) %>% 
  summarise(meansoilpH=mean(soilInCaClpH)) )

dat <- xtable(pHSummary)
print(dat, type = "html")
## <!-- html table generated in R 4.1.2 by xtable 1.8-4 package -->
## <!-- Fri May 20 18:10:20 2022 -->
## <table border=1>
## <tr> <th>  </th> <th> siteID </th> <th> meansoilpH </th>  </tr>
##   <tr> <td align="right"> 1 </td> <td> ABBY </td> <td align="right"> 4.33 </td> </tr>
##   <tr> <td align="right"> 2 </td> <td> BARR </td> <td align="right"> 4.69 </td> </tr>
##   <tr> <td align="right"> 3 </td> <td> BART </td> <td align="right"> 3.32 </td> </tr>
##   <tr> <td align="right"> 4 </td> <td> BLAN </td> <td align="right"> 5.30 </td> </tr>
##   <tr> <td align="right"> 5 </td> <td> BONA </td> <td align="right"> 4.03 </td> </tr>
##   <tr> <td align="right"> 6 </td> <td> CLBJ </td> <td align="right"> 5.71 </td> </tr>
##   <tr> <td align="right"> 7 </td> <td> CPER </td> <td align="right"> 6.33 </td> </tr>
##   <tr> <td align="right"> 8 </td> <td> DCFS </td> <td align="right"> 6.47 </td> </tr>
##   <tr> <td align="right"> 9 </td> <td> DEJU </td> <td align="right"> 4.29 </td> </tr>
##   <tr> <td align="right"> 10 </td> <td> DELA </td> <td align="right"> 5.28 </td> </tr>
##   <tr> <td align="right"> 11 </td> <td> DSNY </td> <td align="right"> 3.54 </td> </tr>
##   <tr> <td align="right"> 12 </td> <td> GRSM </td> <td align="right"> 3.86 </td> </tr>
##   <tr> <td align="right"> 13 </td> <td> GUAN </td> <td align="right"> 7.26 </td> </tr>
##   <tr> <td align="right"> 14 </td> <td> HARV </td> <td align="right"> 3.40 </td> </tr>
##   <tr> <td align="right"> 15 </td> <td> HEAL </td> <td align="right"> 4.37 </td> </tr>
##   <tr> <td align="right"> 16 </td> <td> JERC </td> <td align="right"> 4.94 </td> </tr>
##   <tr> <td align="right"> 17 </td> <td> JORN </td> <td align="right"> 7.33 </td> </tr>
##   <tr> <td align="right"> 18 </td> <td> KONA </td> <td align="right"> 5.42 </td> </tr>
##   <tr> <td align="right"> 19 </td> <td> KONZ </td> <td align="right"> 6.63 </td> </tr>
##   <tr> <td align="right"> 20 </td> <td> LAJA </td> <td align="right"> 6.28 </td> </tr>
##   <tr> <td align="right"> 21 </td> <td> LENO </td> <td align="right"> 4.64 </td> </tr>
##   <tr> <td align="right"> 22 </td> <td> MLBS </td> <td align="right"> 3.50 </td> </tr>
##   <tr> <td align="right"> 23 </td> <td> MOAB </td> <td align="right"> 7.62 </td> </tr>
##   <tr> <td align="right"> 24 </td> <td> NIWO </td> <td align="right"> 4.44 </td> </tr>
##   <tr> <td align="right"> 25 </td> <td> NOGP </td> <td align="right"> 6.19 </td> </tr>
##   <tr> <td align="right"> 26 </td> <td> OAES </td> <td align="right"> 7.35 </td> </tr>
##   <tr> <td align="right"> 27 </td> <td> ONAQ </td> <td align="right"> 7.64 </td> </tr>
##   <tr> <td align="right"> 28 </td> <td> ORNL </td> <td align="right"> 4.45 </td> </tr>
##   <tr> <td align="right"> 29 </td> <td> OSBS </td> <td align="right"> 4.00 </td> </tr>
##   <tr> <td align="right"> 30 </td> <td> PUUM </td> <td align="right"> 4.04 </td> </tr>
##   <tr> <td align="right"> 31 </td> <td> RMNP </td> <td align="right"> 4.92 </td> </tr>
##   <tr> <td align="right"> 32 </td> <td> SCBI </td> <td align="right"> 5.47 </td> </tr>
##   <tr> <td align="right"> 33 </td> <td> SERC </td> <td align="right"> 4.44 </td> </tr>
##   <tr> <td align="right"> 34 </td> <td> SJER </td> <td align="right"> 5.49 </td> </tr>
##   <tr> <td align="right"> 35 </td> <td> SOAP </td> <td align="right"> 5.28 </td> </tr>
##   <tr> <td align="right"> 36 </td> <td> SRER </td> <td align="right"> 6.67 </td> </tr>
##   <tr> <td align="right"> 37 </td> <td> STEI </td> <td align="right"> 4.46 </td> </tr>
##   <tr> <td align="right"> 38 </td> <td> STER </td> <td align="right"> 6.42 </td> </tr>
##   <tr> <td align="right"> 39 </td> <td> TALL </td> <td align="right"> 4.27 </td> </tr>
##   <tr> <td align="right"> 40 </td> <td> TEAK </td> <td align="right"> 4.71 </td> </tr>
##   <tr> <td align="right"> 41 </td> <td> TOOL </td> <td align="right"> 4.69 </td> </tr>
##   <tr> <td align="right"> 42 </td> <td> TREE </td> <td align="right"> 4.32 </td> </tr>
##   <tr> <td align="right"> 43 </td> <td> UKFS </td> <td align="right"> 6.18 </td> </tr>
##   <tr> <td align="right"> 44 </td> <td> UNDE </td> <td align="right"> 4.17 </td> </tr>
##   <tr> <td align="right"> 45 </td> <td> WOOD </td> <td align="right"> 7.00 </td> </tr>
##   <tr> <td align="right"> 46 </td> <td> WREF </td> <td align="right"> 3.94 </td> </tr>
##   <tr> <td align="right"> 47 </td> <td> YELL </td> <td align="right"> 5.56 </td> </tr>
##    </table>

*****JEFFS NEW SECTIONS*****

nlcdClass = evergreenForest, mixedForest, decidiousForest

get means for each siteID and ncldClass

incorporating samplingTiming

  forest %>% 
  filter(nlcdClass == "evergreenForest") %>% 
  ggplot(aes(x=siteID, y=soilTemp, fill = nlcdClass)) + 
  geom_boxplot() + 
  ylim(c(-20, 50)) +
  theme(axis.text.x = element_text(angle=45) ) +
  ggtitle('Evergreen Forested Plots')
## Warning: Removed 641 rows containing non-finite values (stat_boxplot).

  forest %>% 
  filter(nlcdClass == "evergreenForest") %>% 
  ggplot(aes(x=siteID, y=soilMoisture, fill = nlcdClass)) + 
  geom_boxplot() + 
  ylim(c(-1, 10)) +
  theme(axis.text.x = element_text(angle=45) ) +
  ggtitle('Evergreen Forested Plots')
## Warning: Removed 867 rows containing non-finite values (stat_boxplot).

forest_sub <- forest %>% 
  group_by(siteID, nlcdClass) %>% 
  summarise(mean_soilMoisture = mean(soilMoisture, na.rm = TRUE),
            mean_soilTemp = mean(soilTemp, na.rm = TRUE))
## `summarise()` has grouped output by 'siteID'. You can override using the
## `.groups` argument.
g1 <- ggplot(forest_sub, aes(x=mean_soilMoisture, y=mean_soilTemp, color = nlcdClass)) + 
  geom_point() +
  xlim(c(0, 4)) +
  ylim(c(0, 30)) +
  ggtitle('Soil Moisture x Temperatue Forested Plots')
ggplotly(g1)
forest_sub <- forest %>% 
  filter(nlcdClass == "deciduousForest") %>% 
  filter(sampleTiming == "peakGreenness") %>% 
  group_by(siteID) %>% 
  summarise(mean_soilMoisture = mean(soilMoisture, na.rm = TRUE),
            mean_soilTemp = mean(soilTemp, na.rm = TRUE))
g1 <- ggplot(forest_sub, aes(x=mean_soilMoisture, y=mean_soilTemp, color = siteID, label = siteID)) + 
  geom_point() + geom_text(aes(label=siteID),hjust=-0.2, vjust=0.5) +
  xlim(c(0, 4)) +
  ylim(c(0, 30)) +
  ggtitle('Soil Moisture x Temperatue Forested Plots')
g1

forest_sub_down <- forest %>% 
  filter(nlcdClass == "deciduousForest") %>% 
  filter(sampleTiming == "peakGreenness") %>% 
  group_by(siteID) %>% 
  summarise(mean_soilMoisture = mean(soilMoisture, na.rm = TRUE),
            mean_soilTemp = mean(soilTemp, na.rm = TRUE))
g1 <- ggplot(forest_sub, aes(x=mean_soilMoisture, y=mean_soilTemp, color = siteID, label = siteID)) + 
  geom_point() + geom_text(aes(label=siteID),hjust=-0.2, vjust=0.5) +
  xlim(c(0, 4)) +
  ylim(c(0, 30)) +
  ggtitle('Soil Moisture x Temperatue Forested Plots')
g1

forest_sub <- forest %>%
  filter(siteID %in%  c("HARV", "SCBI", "JERC", "GUAN", "UNDE", "UKFS", "MLBS", "TALL", "DCFS", "STER", "CLBJ", "MOAB", "NIWO", "JORN", "WREF", "SJER", "TOOL", "BONA", "PUUM")) %>% 
  filter(nlcdClass == "deciduousForest") %>% 
  filter(sampleTiming == "peakGreenness") %>% 
  group_by(siteID) %>% 
  summarise(mean_soilMoisture = mean(soilMoisture, na.rm = TRUE),
            mean_soilTemp = mean(soilTemp, na.rm = TRUE))
g1 <- ggplot(forest_sub, aes(x=mean_soilMoisture, y=mean_soilTemp, label = siteID)) + 
  geom_point() + 
  geom_text(aes(label=siteID),hjust=-0.2, vjust=0.5) +
  xlim(c(0, 1.5)) +
  ylim(c(0, 30)) +
  ggtitle('Soil Moisture x Temperatue Decidious Forested Plots')
g1

forest_sub <- forest %>%
  filter(siteID %in%  c("HARV", "SCBI", "JERC", "GUAN", "UNDE", "UKFS", "MLBS", "TALL", "DCFS", "STER", "CLBJ", "MOAB", "NIWO", "JORN", "WREF", "SJER", "TOOL", "BONA", "PUUM")) %>% 
  filter(nlcdClass == "evergreenForest") %>% 
  filter(sampleTiming == "peakGreenness") %>% 
  group_by(siteID) %>% 
  summarise(mean_soilMoisture = mean(soilMoisture, na.rm = TRUE),
            mean_soilTemp = mean(soilTemp, na.rm = TRUE))
g1 <- ggplot(forest_sub, aes(x=mean_soilMoisture, y=mean_soilTemp, label = siteID)) + 
  geom_point(color = "darkgreen") + 
  geom_label_repel(aes(label = siteID),
                  box.padding   = 0.35, 
                  point.padding = 0.5,
                  segment.color = 'grey50') +
  xlim(c(0, 1)) +
  ylim(c(0, 30)) +
  xlab("Mean Soil Moisture (%) ") +
  ylab("Mean Soil Temperature (°C)") 
#  ggtitle('Soil Moisture x Temperatue Evergreen Forested Plots')
g1
## Warning: Removed 3 rows containing missing values (geom_point).
## Warning: Removed 3 rows containing missing values (geom_label_repel).

forest_sub <- forest %>% 
  filter(nlcdClass == "deciduousForest") %>% 
  filter(sampleTiming == "peakGreenness") 
g1 <- ggplot(forest_sub, aes(x=reorder(siteID, soilTemp, mean), y=soilTemp)) +
  geom_boxplot() + 
  ylim(c(-1, 35)) +
  theme(axis.text.x = element_text(angle=45) ) +
  ggtitle('Forest Soil Temperature Plots')
g1
## Warning: Removed 87 rows containing non-finite values (stat_boxplot).

forest_sub <- forest %>% 
  filter(nlcdClass == "deciduousForest") %>% 
  filter(sampleTiming == "peakGreenness") 
g1 <- ggplot(forest_sub, aes(x=siteID, y=soilMoisture)) +
  geom_boxplot() + 
  ylim(c(-1, 5)) +
  theme(axis.text.x = element_text(angle=45) ) +
  ggtitle('Forest Soil Moisture Plots')
g1
## Warning: Removed 375 rows containing non-finite values (stat_boxplot).

forest_sub <- forest %>% 
  filter(nlcdClass == "evergreenForest") %>% 
  filter(sampleTiming == "peakGreenness") 
g1 <- ggplot(forest_sub, aes(x=siteID, y=soilMoisture)) +
  geom_boxplot() + 
  ylim(c(-1, 5)) +
  theme(axis.text.x = element_text(angle=45) ) +
  ggtitle('Forest Soil Moisture Plots')
g1
## Warning: Removed 273 rows containing non-finite values (stat_boxplot).

forest_sub <- forest %>%
  filter(siteID %in%  c("HARV", "SCBI", "JERC", "GUAN", "UNDE", "UKFS", "MLBS", "TALL", "DCFS", "STER", "CLBJ", "MOAB", "NIWO", "JORN", "WREF", "SJER", "TOOL", "BONA", "PUUM", "ONAQ", "YELL")) %>% 
  filter(sampleTiming == "peakGreenness") %>% 
  group_by(siteID, nlcdClass) %>% 
  summarise(mean_soilMoisture = mean(soilMoisture, na.rm = TRUE),
            mean_soilTemp = mean(soilTemp, na.rm = TRUE))
## `summarise()` has grouped output by 'siteID'. You can override using the
## `.groups` argument.
g1 <- ggplot(forest_sub, aes(x=mean_soilTemp, y=mean_soilMoisture, color = nlcdClass, label = siteID)) + 
  geom_point() + 
#  geom_text(aes(label=siteID),hjust=-0.2, vjust=0.5) +
  geom_label_repel(aes(label = siteID),
                  box.padding   = 0.35, 
                  point.padding = 0.5,
                  segment.color = 'grey50') +
  xlim(0, 30) +
  ylab("Mean Soil Moisture (%) ") +
  xlab("Mean Soil Temperature (°C)") +
  facet_wrap(~nlcdClass, ncol = 1) 
#  ggtitle('Soil Moisture x Temperatue Evergreen Forested Plots')
g1

forest_sub <- forest %>%
  filter(siteID %in%  c("HARV", "SCBI", "JERC", "GUAN", "UNDE", "UKFS", "MLBS", "TALL", "DCFS", "STER", "CLBJ", "MOAB", "NIWO", "JORN", "WREF", "SJER", "TOOL", "BONA", "PUUM", "ONAQ", "YELL")) %>% 
  filter(sampleTiming == "peakGreenness") %>% 
  group_by(siteID, nlcdClass) %>% 
  summarise(mean_soilMoisture = mean(soilMoisture, na.rm = TRUE),
            mean_soilTemp = mean(soilTemp, na.rm = TRUE))
## `summarise()` has grouped output by 'siteID'. You can override using the
## `.groups` argument.
g1 <- ggplot(forest_sub, aes(x=mean_soilTemp, y=mean_soilMoisture, color = nlcdClass, label = siteID)) + 
  geom_point() + 
#  geom_text(aes(label=siteID),hjust=-0.2, vjust=0.5) +
  geom_label_repel(aes(label = siteID),
                  box.padding   = 0.35, 
                  point.padding = 0.5,
                  segment.color = 'grey50') +
  xlim(0, 30) +
  ylab("Mean Soil Moisture (%) ") +
  xlab("Mean Soil Temperature (°C)") +
  facet_wrap(~nlcdClass)
#  ggtitle('Soil Moisture x Temperatue Evergreen Forested Plots')
g1
## Warning: ggrepel: 3 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps